package bd;

import java.sql.*;

/** Classe pDepe, encarregada da criação do painel de dependente
 *
 */
public class pDepe extends javax.swing.JPanel {

    private String condicoes;
    private conecta bd;
    private frame principal;
    private ResultSet retorno;
    private boolean atualizacao;
    private String novaLinha;
    private painelTabelas painel;

    /** construtor da classe pDepe, encarregado de dar forma ao painel,
     * fazer a ligação com o banco de dados e com a janela principal
     */
    public pDepe(conecta bd, frame principal, painelTabelas painel) {
        initComponents();
        this.bd = bd;
        this.principal = principal;
        this.cancelaDepe.setVisible(false);
        this.painel = painel;
    }

    /** Método initComponents(). tem a função da criação da janela de dependente,
     * criando botões, caixas de texto, etc. É o método que dá forma à janela.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        buscaDepe = new javax.swing.JButton();
        insereDepe = new javax.swing.JButton();
        atualizaDepe = new javax.swing.JButton();
        removeDepe = new javax.swing.JButton();
        jLabel12 = new javax.swing.JLabel();
        nomeCoDEPE = new javax.swing.JTextField();
        dataNascDEPE = new javax.swing.JTextField();
        jLabel13 = new javax.swing.JLabel();
        jLabel14 = new javax.swing.JLabel();
        sexoDEPE = new javax.swing.JTextField();
        cancelaDepe = new javax.swing.JButton();
        jLabel17 = new javax.swing.JLabel();
        idFuDEPE = new javax.swing.JTextField();
        jLabel11 = new javax.swing.JLabel();

        buscaDepe.setText("Buscar");
        buscaDepe.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buscaDepeActionPerformed(evt);
            }
        });

        insereDepe.setText("Inserir");
        insereDepe.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                insereDepeActionPerformed(evt);
            }
        });

        atualizaDepe.setText("Atualizar");
        atualizaDepe.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                atualizaDepeActionPerformed(evt);
            }
        });

        removeDepe.setText("Remover");
        removeDepe.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                removeDepeActionPerformed(evt);
            }
        });

        jLabel12.setText("Nome Completo:");

        jLabel13.setText("Data de Nascimento:");

        jLabel14.setText("Sexo:");

        cancelaDepe.setText("Cancelar");
        cancelaDepe.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelaDepeActionPerformed(evt);
            }
        });

        jLabel17.setText("Entre com os dados:");

        jLabel11.setText("ID do Funcionário:");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 489, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(48, 48, 48)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addComponent(buscaDepe)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(insereDepe)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(atualizaDepe)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(removeDepe)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(cancelaDepe))
                        .addGroup(layout.createSequentialGroup()
                            .addComponent(jLabel13)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 293, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(jLabel17, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 371, Short.MAX_VALUE)
                                .addGroup(layout.createSequentialGroup()
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(jLabel12)
                                        .addComponent(jLabel14)
                                        .addComponent(jLabel11))
                                    .addGap(61, 61, 61)
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(sexoDEPE, javax.swing.GroupLayout.DEFAULT_SIZE, 222, Short.MAX_VALUE)
                                        .addComponent(dataNascDEPE, javax.swing.GroupLayout.DEFAULT_SIZE, 222, Short.MAX_VALUE)
                                        .addComponent(nomeCoDEPE, javax.swing.GroupLayout.DEFAULT_SIZE, 222, Short.MAX_VALUE)
                                        .addComponent(idFuDEPE, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 222, Short.MAX_VALUE))))
                            .addGap(22, 22, 22)))
                    .addGap(48, 48, 48)))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 317, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jLabel17)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(idFuDEPE, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel11))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel12)
                        .addComponent(nomeCoDEPE, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel13)
                        .addComponent(dataNascDEPE, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel14)
                        .addComponent(sexoDEPE, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 139, Short.MAX_VALUE)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(buscaDepe)
                        .addComponent(insereDepe)
                        .addComponent(atualizaDepe)
                        .addComponent(removeDepe)
                        .addComponent(cancelaDepe))
                    .addContainerGap()))
        );
    }// </editor-fold>//GEN-END:initComponents

    /** Trata eventos relacionados ao botão cancelar.
     * Ajusta o label da janela, volta pra janela principal e limpa os campos
     */
    private void cancelaDepeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelaDepeActionPerformed
        jLabel17.setText("Entre com os dados:");
        mudaVisualizacaoDepe();
        condicoes = null;
        novaLinha = null;
        limpaTela();
    }//GEN-LAST:event_cancelaDepeActionPerformed

    /** Trata eventos relacionados ao botão buscar.
     * Realiza a busca de acordo com determinado texto digitado, retornando
     * o resultado da pesquisa. Também trata erro.
     */
    private void buscaDepeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buscaDepeActionPerformed
        lerDepe();
        try {
            System.out.println(condicoes);
            retorno = bd.consulta("SELECT * FROM dependente " + condicoes);
            this.principal.mostraBusca(retorno);
        } catch (SQLException ex) {
            bd.trataErro(ex);
        }
        limpaTela();
    }//GEN-LAST:event_buscaDepeActionPerformed

    /** Trata eventos relacionados ao botão insere.
     * Faz a inserção no banco de dados dos valores digitados no painel.
     */
    private void insereDepeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_insereDepeActionPerformed
        bd.insercao("INSERT INTO dependente(idFu, nomeCompletoDe, dataNascimentoDe, sexoDe)"
                + " VALUES (" + idFuDEPE.getText() + ", "
                + "'" + nomeCoDEPE.getText() + "', "
                + "TO_DATE('" + dataNascDEPE.getText() + "', 'DD.MM.YYYY'), "
                + "UPPER('" + sexoDEPE.getText() + "'))");
        limpaTela();
    }//GEN-LAST:event_insereDepeActionPerformed

    /** Trata eventos relacionados ao botão atualiza. Quando o botão é pressionado,
     * é enviada uma mensagem de instruções para acontecer a atualização.
     * Recebe os dados digitados e atualiza no banco.
     */
    private void atualizaDepeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_atualizaDepeActionPerformed
        if (atualizacao == false) {
            lerDepe();//fazer o teste para ver quantoas linhas irá atualizar
            jLabel17.setText("Entre com os novos dados e aperte atualizar novamente");
            mudaVisualizacaoDepe();
            limpaTela();
        } else if (atualizacao == true) {
            novaLinha = "SET";
            if (idFuDEPE.getText() != null && !idFuDEPE.getText().trim().equals("")) {
                novaLinha = novaLinha + " idFu = " + idFuDEPE.getText() + ", ";
            }
            if (nomeCoDEPE.getText() != null && !nomeCoDEPE.getText().trim().equals("")) {
                novaLinha = novaLinha + " UPPER(nomeCompletoDe) LIKE UPPER('%" + nomeCoDEPE.getText() + "%'), ";
            }
            if (sexoDEPE.getText() != null && !sexoDEPE.getText().trim().equals("")) {
                novaLinha = novaLinha + " UPPER(sexoDe) LIKE UPPER('%" + sexoDEPE.getText() + "%'), ";
            }
            if (dataNascDEPE.getText() != null && !dataNascDEPE.getText().trim().equals("")) {
                novaLinha = novaLinha + " dataNascimentoDe = TO_DATE('" + dataNascDEPE.getText() + "', 'DD.MM.YYYY'), ";
            }
            novaLinha = novaLinha.substring(0, novaLinha.length() - 2);
            bd.atualiza("UPDATE dependente " + novaLinha + " " + condicoes);
            jLabel17.setText("Entre com os dados:");
            mudaVisualizacaoDepe();
            condicoes = null;
            novaLinha = null;
            limpaTela();
        }
    }//GEN-LAST:event_atualizaDepeActionPerformed

    /** Trata eventos relacionados ao botão remove.
     * Remove determinada tupla selecionada. trata erros
     */
    private void removeDepeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeDepeActionPerformed
        novaLinha = "dependente";//novaLinha esta sendo usada para parametrizar a exclusão pelo outro painel
        lerDepe();
        try {
            retorno = bd.consulta("SELECT * FROM " + novaLinha + " " + condicoes);
            this.painel.novaLinha = novaLinha;
            this.painel.condicoes = condicoes;
        } catch (SQLException ex) {
            System.out.println("Erro " + ex);
        }
        this.principal.BuscaParaRemover(retorno);
        limpaTela();
    }//GEN-LAST:event_removeDepeActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton atualizaDepe;
    private javax.swing.JButton buscaDepe;
    private javax.swing.JButton cancelaDepe;
    private javax.swing.JTextField dataNascDEPE;
    private javax.swing.JTextField idFuDEPE;
    private javax.swing.JButton insereDepe;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel13;
    private javax.swing.JLabel jLabel14;
    private javax.swing.JLabel jLabel17;
    private javax.swing.JTextField nomeCoDEPE;
    private javax.swing.JButton removeDepe;
    private javax.swing.JTextField sexoDEPE;
    // End of variables declaration//GEN-END:variables

    /** Método que muda a visualização da janela comercial
     */
    private void mudaVisualizacaoDepe() {
        cancelaDepe.setVisible(!atualizacao);
        painel.abaEdicaoTabelas.setEnabled(atualizacao);
        painel.painelPrincipal.setEnabled(atualizacao);
        buscaDepe.setEnabled(atualizacao);
        insereDepe.setEnabled(atualizacao);
        removeDepe.setEnabled(atualizacao);
        atualizacao = !atualizacao;
    }

    /** limpa os campos.
     */
    private void limpaTela() {
        dataNascDEPE.setText(null);
        idFuDEPE.setText(null);
        nomeCoDEPE.setText(null);
        sexoDEPE.setText(null);
    }

    /** Lê valores digitados, usando-os para fazer a condição do select
     */
    private void lerDepe() {
        condicoes = "WHERE";
        if (idFuDEPE.getText() != null && !idFuDEPE.getText().trim().equals("")) {
            condicoes = condicoes + " idFu = " + idFuDEPE.getText() + " AND ";
        }
        if (nomeCoDEPE.getText() != null && !nomeCoDEPE.getText().trim().equals("")) {
            condicoes = condicoes + " UPPER(nomeCompletoDe) LIKE UPPER('%" + nomeCoDEPE.getText() + "%') AND ";
        }
        if (sexoDEPE.getText() != null && !sexoDEPE.getText().trim().equals("")) {
            condicoes = condicoes + " UPPER(sexoDe) LIKE UPPER('%" + sexoDEPE.getText() + "%') AND ";
        }
        if (dataNascDEPE.getText() != null && !dataNascDEPE.getText().trim().equals("")) {
            condicoes = condicoes + " dataNascimentoDe = TO_DATE('" + dataNascDEPE.getText() + "', 'DD.MM.YYYY') AND ";
        }
        condicoes = condicoes.substring(0, condicoes.length() - 5);
    }
}
